/**
 * All rights Reserved
 *
 * @Title: GoodsService.java
 * @Package com.amigo.online.provider.merchant.service
 * @Description: (用一句话描述该文件做什么)
 * @author: zxy  QQ:1363320658
 * @date: 2018年12月17日 下午4:29:52
 * @version V1.0
 * @Copyright: 2018  All rights reserved.
 */
package com.amigo.online.provider.merchant.service;

import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSONObject;
import com.amigo.online.common.param.result.goods.HomeGoodsInfo;

/**
 * @version: V 1.0.0
 * @Description: （商品接口层）
 * @author: zxy QQ:1363320658
 * @date: 2018年12月17日 下午4:29:52
 *
 */

public interface GoodsService {

    /**
     * @Title: findHotGoods @Description: (这里用一句话描述这个方法的作用) @param: @param
     * label @param: @param category @param: @param service @param: @param
     * minPrice @param: @param maxPrice @param: @return @return:
     * List<Object> @throws
     */
    List<HomeGoodsInfo> findHotGoods(Integer page, Integer label, Integer category, Integer service, Integer minPrice,
                                     Integer maxPrice);

    /**
     * @Title: findRecommendGoods @Description: (这里用一句话描述这个方法的作用) @param: @param
     * label @param: @param category @param: @param service @param: @param
     * minPrice @param: @param maxPrice @param: @return @return:
     * List<Object> @throws
     */
    List<HomeGoodsInfo> findRecommendGoods(Integer page, Integer label, Integer category, Integer service,
                                           Integer minPrice, Integer maxPrice);

    /**
     * @Title: findNearestGoods @Description: (这里用一句话描述这个方法的作用) @param: @param
     * label @param: @param category @param: @param service @param: @param
     * minPrice @param: @param maxPrice @param: @param longitude @param: @param
     * latitude @param: @return @return: List<Object> @throws
     */
    List<HomeGoodsInfo> findNearestGoods(Integer page, Integer label, Integer category, Integer service,
                                         Integer minPrice, Integer maxPrice, Double longitude, Double latitude);

    /**
     * 获取商品详细信息
     *
     * @param goodsId
     * @return
     */
    JSONObject getGoodsDetailById(Long goodsId, String lat, String lng);

    /**
     *
     * @param merchantId
     * @param page
     * @param size
     * @param type
     * @return
     */
    List<HomeGoodsInfo> getGoodsOrderBYField(Long merchantId, Integer page, Integer size, Integer type,
                                             Long categoryId);


    /**
     *
     * @Title: shelfMerchantGoodsByGoodsId
     * @Description: (下架商品)
     * @param: @param uerId
     * @param: @param merchantId
     * @param: @param goodId
     * @return: void
     * @throws
     */
    void shelfMerchantGoodsByGoodsId(long uerId, long merchantId, long goodId);


    /**
     *
     * @Title: deleteMerchantGoodsByGoodsId
     * @Description: (删除商品)
     * @param: @param uerId
     * @param: @param merchantId
     * @param: @param goodId
     * @return: void
     * @throws
     */
    void deleteMerchantGoodsByGoodsId(long uerId, long merchantId, long goodId);


    /**
     *
     * @Title: obtainedMerchantGoodsByGoodsId
     * @Description: (上架商品)
     * @param: @param uerId
     * @param: @param merchantId
     * @param: @param goodId
     * @return: void
     * @throws
     */
    void obtainedMerchantGoodsByGoodsId(long uerId, long merchantId, long goodId);

    /**
     *
     * @Title: editMerchantGoods
     * @Description: (编辑商品)
     * @param: @param goodsImgList
     * @param: @param goodsVideoList
     * @param: @param goodsName
     * @param: @param price
     * @param: @param discountPrice
     * @param: @param category
     * @param: @param goodsDetailImgList
     * @param: @param isAutoShelf
     * @param: @param merchantId
     * @return: void
     * @throws
     */

    /**
     *
     * @Title: newMerchantGoods
     * @Description: (编辑商品)
     * @param: @param userId
     * @param: @param merchantId
     * @param: @param goodsImgList
     * @param: @param goodsVideoList
     * @param: @param goodsName
     * @param: @param price
     * @param: @param discountPrice
     * @param: @param category
     * @param: @param goodsDetailImgList
     * @param: @param isAutoShelf
     * @return: void
     * @throws
     */
    void newMerchantGoods(long userId, long merchantId, List<String> goodsImgList, List<String> goodsVideoList, String goodsName, Integer price,
                          Integer discountPrice, Long category, List<String> goodsDetailImgList, Integer isAutoShelf);

    /**
     *
     * @Title: editMerchantGoods
     * @Description: (新建商品)
     * @param: @param userId
     * @param: @param merchantId
     * @param: @param goodsId
     * @param: @param goodsImgList
     * @param: @param goodsVideoList
     * @param: @param goodsName
     * @param: @param price
     * @param: @param discountPrice
     * @param: @param category
     * @param: @param goodsDetailImgList
     * @param: @param isAutoShelf
     * @return: void
     * @throws
     */
    void editMerchantGoods(long userId, long merchantId, long goodsId, List<String> goodsImgList, List<String> goodsVideoList, String goodsName, Integer price,
                           Integer discountPrice, Long category, List<String> goodsDetailImgList, Integer isAutoShelf);

    void multiUpdateGoods(Map<Long, Double> weightMap);

}
